package ftp

import (
	"io"
	"io/ioutil"
	"strings"
)

//文件下载器
type FileDownload interface {
	DowloadFileByIo(uri string) error
}
type impl interface {
	read(reader io.Reader) ([]byte, error)
	parse([]byte) ([]byte, error)
	save() error
	close() error
}
type HttpDownloader struct {
	*template
	//可以加就加入解析器模式 httpasrse
	//如果有相同的可以进行抽离为
	//魔板
	//魔板抽离出接口
	//接口参数属性抽离
	//实现分离
	//
}

func (t *HttpDownloader) read(reader io.Reader) ([]byte, error) {
	return ioutil.ReadAll(reader)
}
func (t *HttpDownloader) parse(b []byte) ([]byte, error) {
	//解析
	return b, nil

}
func (t *HttpDownloader) save() error {
	return nil
}
func (t *HttpDownloader) close() error {
	return nil
}
func NewHttpDonload() FileDownload {
	ht := &HttpDownloader{}
	ht.template = newTemplate(ht)
	return ht
}

type template struct {
	impl
	uri string
}

func newTemplate(impl impl) *template {
	return &template{impl: impl}
}

func (t *template) DowloadFileByIo(uri string) error {
	t.uri = uri
	reader := strings.NewReader(uri)
	c, err := t.impl.read(reader)
	if err != nil {
		return err
	}
	c, err = t.impl.parse(c)
	if err != nil {
		return err
	}
	t.impl.save()
	defer t.impl.close()

	return nil
}

// 进行解析
//
